/**
 * 公用函数方法
 * @param {xxx}  xxx  xxx
 */

/**
 * 生成随机字符串
 * @param {}
 */
export const randomString = () => Math.random().toString(36).slice(2);

/**
 * 时间戳转日期
 * @param {Number}  time  时间戳
 */
export const changeData = time => {
  let data = new Date(time * 1000);
  let year = data.getFullYear();
  let month = data.getMonth() + 1 < 10 ? '0' + (data.getMonth() + 1) : data.getMonth() + 1;
  let date = data.getDate() < 10 ? '0' + data.getDate() : data.getDate();
  return year + '.' + month + '.' + date;
};

/**
 * 时间戳转时间
 * @param {Number}  time  时间戳
 */
export const changeTime = time => {
  let data = new Date(time * 1000);
  let hours = data.getHours() < 10 ? '0' + data.getHours() : data.getHours();
  let minutes = data.getMinutes() < 10 ? '0' + data.getMinutes() : data.getMinutes();
  let seconds = data.getSeconds() < 10 ? '0' + data.getSeconds() : data.getSeconds();
  return hours + ':' + minutes + ':' + seconds;
};

/**
 * 校验手机号
 * @param {Number}  phone  手机号
 */
export const isPhone = phone => {
  const reg = /^1(3|4|5|6|7|8|9)\d{9}$/;
  return reg.test(phone);
};

/**
 * 校验邮箱
 * @param {Number}  email  邮箱
 */
export const isEmail = email => {
  const reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
  return reg.test(email);
};

/**
 * 校验只能是数字或字母
 * @param {Number,string}  num  内容
 */
export const letterNum = num => {
  const reg = /^[A-Za-z\d]+$/;
  return reg.test(num);
};

/**
 * 校验只能是数字或字母和下划线
 * @param {Number,string}  value  内容
 */
export const letterNumLine = (rule, value, callback) => {
  const reg = /^\w+$/g;
  if (!reg.test(value)) callback(new Error('请输入正确的账号'));
  else callback();
};

/**
 * 计算倒计时 时分秒
 * @param {number}  end  结束时间戳
 */
export const countTime = end => {
  const now = Date.parse(new Date()); // 当前时间戳
  const msec = end - now; // 获得倒计时时间戳
  let day = msec >= 0 ? parseInt(msec / 1000 / 60 / 60 / 24) : 0; // 算出天数
  let hour = msec >= 0 ? formatNum(parseInt((msec / 1000 / 60 / 60) % 24)) : '00'; // 算出小时数
  let minute = msec >= 0 ? formatNum(parseInt((msec / 1000 / 60) % 60)) : '00'; // 算出分钟数
  let second = msec >= 0 ? formatNum(parseInt((msec / 1000) % 60)) : '00'; // 算出秒数
  return {
    dataTime: `${day}天 ${hour}:${minute}:${second}`,
    msec: msec
  };
};

/**
 * 个位数加0
 * @param {number}  time  当前时间戳
 */
export const formatNum = time => (time > 9 ? time : '0' + time);

/**
 * 手机号加密
 * @param {number}  phone  手机号
 */
export const phoneEncryption = phone => phone.replace(/^(\d{3})\d+(\d{4})$/, '$1 **** $2');

/**
 * 获取富文本的纯文字内容
 * @param {string}  richCont  富文本内容
 */
export const getPlainText = richCont => {
  let value = richCont;
  if (richCont) {
    // 方法一：
    value = value.replace(/\s*/g, ''); // 去掉空格
    value = value.replace(/<[^>]+>/g, ''); // 去掉所有的html标记
    value = value.replace(/↵/g, ''); // 去掉所有的↵符号
    value = value.replace(/[\r\n]/g, ''); // 去掉回车换行
    value = value.replace(/&nbsp;/g, ''); // 去掉空格
    value = convertIdeogramToNormalCharacter(value);
    return value;

    // 方法二：
    // value = value.replace(/(\n)/g, "");
    // value = value.replace(/(\t)/g, "");
    // value = value.replace(/(\r)/g, "");
    // value = value.replace(/<\/?[^>]*>/g, "");
    // value = value.replace(/\s*/g, "");
    // value = convertIdeogramToNormalCharacter(value);
    // return value;
  } else {
    return null;
  }
};

/**
 * 转意符换成普通字符
 * @param {string}  val  转意内容
 */
export const convertIdeogramToNormalCharacter = val => {
  const arrEntities = { lt: '<', gt: '>', nbsp: ' ', amp: '&', quot: '"' };
  return val.replace(/&(lt|gt|nbsp|amp|quot);/gi, function (all, t) {
    return arrEntities[t];
  });
};
/**
 * 小写数字转大写
 * @param {Number || String}  val  转大写的小写数字
 */
export const numberToCapital = val => {
  let text = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
  if (isNaN(val * 1)) return val;
  val = val * 1;
  if (val <= 10) {
    return text[val - 1];
  } else if (val < 100) {
    let val1 = val % 10 ? text[(val % 10) - 1] : '';
    if (val < 20) {
      return '十' + val1;
    }
    return text[parseInt(val / 10) - 1] + '十' + val1;
  } else {
    return val;
  }
};
